package cn.tpshion.config.common;

import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;

/**
 * 业务断言
 * 功能：用于减少 if 判断异常抛出代码
 */
public class Assert {

    /**
     * 判断字符串不为空
     * @param str 字符串
     * @param errorMsg 错误信息
     */
    public static void notEmpty(String str, String errorMsg){
        if(!StringUtils.hasText(str)){
            throw new BusinessException(ErrorCode.FAIL.getCode(), errorMsg);
        }
    }

    public static void notEmpty(String str, ErrorCode errorCode, String errorMsg){
        if(!StringUtils.hasText(str)){
            throw new BusinessException(errorCode.getCode(), errorMsg);
        }
    }

    /**
     * 判断集合不为空
     * @param collection 集合
     * @param errorMsg 错误信息
     */
    public static void notEmpty(Collection<?> collection, String errorMsg){
        if (CollectionUtils.isEmpty(collection)) {
            throw new BusinessException(ErrorCode.FAIL.getCode(), errorMsg);
        }
    }

    /**
     * 判断Map不为空
     * @param map Map对象
     * @param errorMsg 错误信息
     */
    public static void notEmpty(Map<?,?> map, String errorMsg){
        if(Objects.isNull(map) || map.isEmpty()){
            throw new BusinessException(ErrorCode.FAIL.getCode(), errorMsg);
        }
    }

    /**
     * 判断对象不为空
     * @param obj 对象
     * @param errorMsg 错误信息
     */
    public static void notNull(Object obj, String errorMsg){
        if(Objects.isNull(obj)){
            throw new BusinessException(ErrorCode.FAIL.getCode(), errorMsg);
        }
    }

    /**
     * 判断表达式为真
     * @param expression 表达式
     * @param errorMsg 错误信息
     */
    public static void isTrue(boolean expression, String errorMsg){
        if(!expression){
            throw new BusinessException(ErrorCode.FAIL.getCode(), errorMsg);
        }
    }

    /**
     * 判断表达式为真
     * @param expression 表达式
     * @param errorMsg 错误信息
     */
    public static void isFalse(boolean expression, String errorMsg){
        if(!expression){
            throw new BusinessException(ErrorCode.FAIL.getCode(), errorMsg);
        }
    }
}
